#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char* argv[], char* env[])
{
    pid_t id = fork();
    if(id == 0)
    {
        // child
        printf("before: I am process, pid: %d, ppid: %d\n", getpid(), getppid());
        // sleep(5);
        // 这类方法的标准写法
        // execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
        // execl("/usr/bin/top", "top", NULL);
        // execl("./otherExe", "otherExe", NULL);
        // execlp("ls", "ls", "-a", "-l", NULL);
        char *const myargv[] = {"otherExe", "-a", "-b", "-c", NULL};
        char *const myenv[] = {
            "MY_YAL = 123456",
            "MY_NAME = lesson17",
            NULL
        };
        execve("./otherExe", myargv, myenv);

        printf("after: I am process, pid: %d, ppid: %d\n", getpid(), getppid());
        exit(1);
    }
    // father
    pid_t ret = waitpid(id, NULL, 0);
    if(ret > 0) printf("wait success, father pid: %d, ret id: %d\n", getpid(), ret);

    // sleep(5);
    return 0;
}
